    // 遇到*要往前倒两个 目的是 代表“字母*”整体的个数为0时的匹配情况  如果*没出现的时候 依然 match 就为true 
    var isMatch = function (s, p) {
        // debugger
        // 预处理 s 和 p，让字母下标从 1 开始。
        s = ' ' + s;
        p = ' ' + p;

        // dp[i][j] 表示 s[1...i] 和 p[1...j] 是否匹配
        const dp = new Array(s.length).fill(false).map(() => new Array(p.length).fill(false));
        dp[0][0] = true
        // 初始化
        for (let i = 0; i < p.length; i++) {
            if (p[i] === '*') {
                dp[0][i] = dp[0][i - 2];
            }
        }
        // 开始处理
        for (let i = 1; i < s.length; i++) {
            for (let j = 1; j < p.length; j++) {
                // 用每一列的每一个s 去 match整个p
                // 如果规则是 .  或者 a == a都取上一次的match
                if (p[j] === '.' || s[i] === p[j]) {
                    // 字符相同 所以这个时候要看这个字符前面的字符串是否match 如果match 那么即使加上a=a 也mathc
                    dp[i][j] = dp[i - 1][j - 1]
                } else if (p[j] == '*') {
                    // 如果s[j]和p[j] 不相同 并且上一个不是 .
                    if (p[j - 1] !== s[i] && p[j - 1] !== '.') {
                        // 往前倒两个看看当*号前面那个字符没有出现之前 字符串是否match
                        dp[i][j] = dp[i][j - 2];
                    } else {
                        // 相同或者是* 
                        // 如果往前移两个为false  那么久判断上一个是否为true
                        // 如果 a == a 并且 上一个 * 未true
                        dp[i][j] = dp[i][j - 2] || dp[i - 1][j];
                    }
                }
            }
        };
        // console.log('dp ==> ', dp)
        return dp[s.length - 1][p.length - 1];
    }

    //  完全匹配
    // isMatch("ab", "a3")

    // 匹配重复
    // isMatch("ab", "a*")

    // 完全匹配
    // isMatch('a','a')

    // 模糊匹配任意字符
    console.log("isMatch('ab', '.*'== ", isMatch('ab', '.*'))

    // 多个*
    // console.log('isMatch("mississippi", "mis*is*p*.")===> ', isMatch("mississippi", "mis*is*p*."))
    // console.log('isMatch("mississppi", "mis*is*p*.")===> ', isMatch("acabaa", "b*b.ab"))
    // 携带后缀
    // console.log('isMatch("aaaab", ".*b")==> ', isMatch("aaaab", ".*b"))